在開始介紹 Arguments 之前,想先跟各位介紹一級函式 ( First-class function ),而什麼是一級函式呢?
一級函式是指你對其他型別,例如 string、number、boolear 做的事情,同樣也可以對 function 做。
包括將 funtion 指定成一個變數、當作參數傳給另一個 function、或向物件一樣設定屬性或者方法。
下面會用程式碼來驗證
// 將函式指定成一個變數
const foo = function() {
console.log("foobar");
}
foo();
// 將函式當作參數傳遞
function sayHi() {
return "Hi, ";
}
function greeting(message, name) {
console.log(message() + name);
}
greeting(sayHi, "there!");
// 函式設定屬性
let foo = function() {
console.log("foobar");
}
foo.mean = "Not Thing";
console.log(foo.mean); // Not Thing
在介紹完一級函式後,讓我們來介紹到今天的正題 argument
每個函式都有 this 與 argument,相信大多數人都有看過 this 和用過它,但是 argument 可能剛入門的朋友就比較不知道,arguments 是一個類陣列的物件( Array-Like Objects ),它可以存取所有傳送到函式的參數
,也具備用引數的方式來存取值與具有 length 的屬性,但並不具備陣列的方法,例如 filter、map、forEach 等等
以下同樣讓我們用程式碼來驗證
// 取得參數
function getArguments() {
console.log( "長度 :" + arguments.length, "參數一 :" + arguments[0], "參數二 :" + arguments[1] );
console.log(arguments);
}
getArguments(100, 200);
那如果要讓 arguments 能使用陣列的方法應該怎麼做呢?
function toAry() {
var args = new Array(); // 先將變數 args 指定成一個陣列
for( let i = 0; i < arguments.length; i++ ) { // 將參數加到陣列當中
args.push(arguments[i]);
}
args.forEach( item => console.log(item) ); // 驗證,結果是 1,2,3,4
}
toAry(1,2,3,4)
真是高估了自己的意志力 囧,才第三天就有一點倦怠 XDDDD
參考資料: Tommy - 深入 JavaScript 核心課程